#include #include using namespace std; //bit-wize operations // and or xor // & | ^ //refactoring - make code more readable, does not change functionality const int BOARD_FULL = 1022; bool positionTaken(int position, int xMoves, int oMoves); bool positionTaken(int position, int moves); bool gameOver(int xMoves, int oMoves); bool playerHasWon( int moves ); void dispalyGameBoard(int xMoves, int oMoves); void changeTurn( char& turn ); void makeValidMove(int& move, char turn, int& xMoves, int& oMoves); void announceWinner(int xMoves, int oMoves ); void main() { int xMoves = 0; int oMoves = 0; char turn = 'X'; int move; do { system("cls"); dispalyGameBoard(xMoves,oMoves); makeValidMove(move, turn, xMoves, oMoves ); changeTurn(turn); } while(!gameOver(xMoves,oMoves)); system("cls"); dispalyGameBoard(xMoves,oMoves); announceWinner(xMoves,oMoves); } void announceWinner(int xMoves, int oMoves ) { if(playerHasWon(xMoves)) { cout << "X wins" << endl; } else if(playerHasWon(oMoves)) { cout << "O wins" << endl; } else { cout << "Cat wins" << endl; } } void makeValidMove(int& move, char turn, int& xMoves, int& oMoves) { do { cout << turn << "'s turn: "; cin >> move; } while(move < 1 || move > 9 || positionTaken(move,xMoves,oMoves)); if(turn == 'X') { xMoves += (int)pow(2.0,move); } else { oMoves += (int)pow(2.0,move); } } void changeTurn( char& turn ) { if(turn == 'X') { turn = 'O'; } else { turn = 'X'; } } void dispalyGameBoard(int xMoves, int oMoves) { for(int i = 1; i <= 9; i++) { if(positionTaken(i,xMoves)) { cout << "X"; } else if(positionTaken(i,oMoves)) { cout << "O"; } else { cout << i; } if(i ==3 || i == 6) { cout << endl << "-----" << endl; } else if (i == 9) { cout << endl; } else { cout << "|"; } } } bool positionTaken(int position, int xMoves, int oMoves) { bool result = false; if ((xMoves & (int)pow(2.0,position)) == (int)pow(2.0,position) || (oMoves & (int)pow(2.0,position)) == (int)pow(2.0,position)) { result = true; } return result; } bool positionTaken(int position, int moves) { bool result = false; if ((moves & (int)pow(2.0,position)) == (int)pow(2.0,position)) { result = true; } return result; } bool playerHasWon( int moves ) { bool result = false; if((moves & 14) == 14 || (moves & 112) == 112 || (moves & 896) == 896 || (moves & 146) == 146 || (moves & 292) == 292 || (moves & 584) == 584 || (moves & 168) == 168 || (moves & 546) == 546 ) { result = true; } return result; } bool gameOver(int xMoves, int oMoves) { bool result = false; if( playerHasWon(xMoves) || playerHasWon(oMoves) || xMoves + oMoves == BOARD_FULL ) { result = true; } return result; } /////////////////////////////////////////////////////////////// #include #include using namespace std; void displayOnesPlace(int onesPlace) { switch (onesPlace) { case 1: cout << "one "; break; case 2: cout << "one "; break; case 3: cout << "one "; break; case 4: cout << "one "; break; case 5: cout << "one "; break; case 6: cout << "one "; break; case 7: cout << "one "; break; case 8: cout << "one "; break; case 9: cout << "one "; break; } } void displayTensPlace(int tensPlace) { switch (tensPlace) { //case 1: cout << "one "; break; case 2: cout << "one "; break; case 3: cout << "one "; break; case 4: cout << "one "; break; case 5: cout << "one "; break; case 6: cout << "one "; break; case 7: cout << "one "; break; case 8: cout << "one "; break; case 9: cout << "one "; break; } } void displayTeens(int teen) { switch (teen) { case 10: cout << "one "; break; case 11: cout << "one "; break; case 12: cout << "one "; break; case 13: cout << "one "; break; case 14: cout << "one "; break; case 15: cout << "one "; break; case 16: cout << "one "; break; case 17: cout << "one "; break; case 18: cout << "one "; break; case 19: cout << "one "; break; default: //do stuff break; } } void main() { int i; cin >> i; displayOnesPlace(i); }